package com.powerbank.devicecenter.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.powerbank.common.dto.DeviceDTO;
import com.powerbank.common.dto.DeviceLocationRequest;
import com.powerbank.common.dto.DeviceStatusRequest;
import com.powerbank.common.result.PageResult;
import com.powerbank.common.result.Result;
import com.powerbank.devicecenter.entity.Device;

import java.math.BigDecimal;
import java.util.List;

/**
 * 设备服务接口
 */
public interface DeviceService extends IService<Device> {

    /**
     * 根据设备ID查询设备
     */
    Result<DeviceDTO> getDeviceById(Long deviceId);

    /**
     * 根据设备编号查询设备
     */
    Result<DeviceDTO> getDeviceByCode(String deviceCode);

    /**
     * 查询可用设备列表
     */
    Result<List<DeviceDTO>> getAvailableDevices();

    /**
     * 根据位置查询附近设备
     */
    Result<List<DeviceDTO>> getNearbyDevices(BigDecimal longitude, BigDecimal latitude, Integer radius);

    /**
     * 根据站点ID查询设备列表
     */
    Result<PageResult<DeviceDTO>> getDevicesByStation(Long stationId, Integer page, Integer size);

    /**
     * 锁定设备
     */
    Result<Void> lockDevice(Long deviceId, String orderNo);

    /**
     * 解锁设备
     */
    Result<Void> unlockDevice(Long deviceId, String orderNo);

    /**
     * 启动设备
     */
    Result<Void> startDevice(Long deviceId, String orderNo);

    /**
     * 停止设备
     */
    Result<Void> stopDevice(Long deviceId, String orderNo);

    /**
     * 更新设备状态
     */
    Result<Void> updateDeviceStatus(DeviceStatusRequest request);

    /**
     * 更新设备位置
     */
    Result<Void> updateDeviceLocation(DeviceLocationRequest request);

    /**
     * 处理设备心跳
     */
    Result<Void> handleDeviceHeartbeat(String deviceCode);

    /**
     * 查询离线设备
     */
    Result<List<DeviceDTO>> getOfflineDevices();

    /**
     * 查询低电量设备
     */
    Result<List<DeviceDTO>> getLowBatteryDevices();

    /**
     * 设备故障报告
     */
    Result<Void> reportDeviceFault(Long deviceId, String faultDescription);

    /**
     * 设备维护完成
     */
    Result<Void> completeDeviceMaintenance(Long deviceId);

    /**
     * 批量更新设备状态
     */
    Result<Void> batchUpdateDeviceStatus(List<Long> deviceIds, String status);

    /**
     * 获取设备统计信息
     */
    Result<Object> getDeviceStatistics();
}